<?php
/**
 * Created by PhpStorm.
 * User: shutao
 * Date: 2018/9/26
 * Time: 10:14
 */

namespace wechat\services;

use tt\common\help\HookHelp;
use ttcommon\base\Arrays;
use ttext\backend\admin\models\SystemSetting;

/**
 * 内置变量
 * 1. 要求规则 '变量名' => ['示例标题', 实际的值, '来源[可选]', 'value' => '更高级的最终实际值[可选]];
 * 2. 实际的值通常为普通文字，或返回普通文字的函数；不能包含 html 标记，比如 <a> 之类；否则会引起匹配失败，或者页面展示错误
 * 3. 如果有 html 标记的需要，可以放在 `value` 中，它在 WeKeywordService 中具有更高级，要覆盖掉 '实际的值'
 */
class WeSystemVar
{

    /**
     * 名称必须符合此规则
     */
    const NAME_RULE = '#^\w+$#';

    const ON_WECHAT_SYSTEM_VAR = 'wechat_system_var';

    public static function vars($var = null)
    {
        static $vars;
        if (!$vars) {
            $vars = self::funcVars();
            // 追加系统设置
            foreach (SystemSetting::find()->where(['gid' => 1])
                         ->select(['name', 'label', 'content'])->asArray()->each()
                     as $item) {
                $vars[$item['name']] = [
                    $item['label'],
                    $item['content']
                ];
            }
            // 追加其它的变量
            if ($hookSystemVar = HookHelp::on(self::ON_WECHAT_SYSTEM_VAR)) {
                if (is_array($hookSystemVar)) {
                    $vars = array_merge($vars, $hookSystemVar);
                }
            }
        }
        return Arrays::constText($vars, $var, null);
    }

    public static function funcVars($name = null)
    {
        static $vars;
        if (!$vars) {
            $vars = [
                // 键为变量名, 0=>示例标题，让用户知道什么意思；1=>编辑器中展示的值，在可视化的 ueditor 中，可能大概看到效果
                // 省略的项: 2=>来源, 3=>最终值
                'date' => ['当前日期', date('Y-m-d')],
                'datetime' => ['当前日期时间', date('Y-m-d H:i:s')],
            ];
        }
        return Arrays::constText($vars, $name, null);
    }
}